﻿using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;

namespace WebApplication1.DL
{
    public class Pacientes : db
    {
        public void Insertar(Entidades.Paciente p)
        {
            string qry = string.Format("INSERT INTO Pacientes VALUES(null, '{0}','{1}','{2:yyyy-MM-dd HH:mm:ss}', '{3}', '{4}', '{5}')", p.Nombre, p.Apellido, p.FechaNac, p.Email, p.Domicilio, p.Telefono);
            ExecuteQuery(qry);
        }

        public List<Entidades.Paciente> Lista
        {
            get
            {
                sql_con.Open();
                sql_cmd = sql_con.CreateCommand();
                string CommandText = "select Id, Nombre, Apellido, FechaNac, Email, Domicilio, Telefono from Pacientes;";
                DB = new SQLiteDataAdapter(CommandText, sql_con);
                ds.Reset();
                DB.Fill(ds);
                dt = ds.Tables[0];
                sql_con.Close();
                List<Entidades.Paciente> lista = new List<Entidades.Paciente>();
                Completar(lista);
                return lista;
            }
        }

        internal void Eliminar(Entidades.Paciente paciente)
        {
            string qry = string.Format("DELETE FROM Pacientes WHERE Pacientes.Id='{0}'", paciente.Id);
            ExecuteQuery(qry);
        }

        internal void Modificar(Entidades.Paciente paciente)
        {
            string qry = string.Format("UPDATE Pacientes SET Nombre='{0}', Apellido='{1}', FechaNac='{2:yyyy-MM-dd HH:mm:ss}', Email='{4}', Domicilio='{5}', Telefono='{6}' WHERE Id={3};",
                paciente.Nombre, paciente.Apellido, paciente.FechaNac, paciente.Id, paciente.Email, paciente.Domicilio, paciente.Telefono);
            ExecuteQuery(qry);
        }

        internal List<Entidades.Paciente> ListaFiltrada(string filtro)
        {
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = string.Format("select Id, Nombre, Apellido, FechaNac, Email, Domicilio, Telefono from Pacientes where Apellido like '%{0}%' or Nombre like '%{0}%';", filtro);
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            ds.Reset();
            DB.Fill(ds);
            dt = ds.Tables[0];
            sql_con.Close();
            List<Entidades.Paciente> lista = new List<Entidades.Paciente>();
            Completar(lista);
            return lista;
        }

        private void Completar(List<Entidades.Paciente> lista)
        {
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Entidades.Paciente p = new Entidades.Paciente();
                p.Id = System.Convert.ToUInt32(dt.Rows[i]["Id"]);
                p.Nombre = System.Convert.ToString(dt.Rows[i]["Nombre"]);
                p.Apellido = System.Convert.ToString(dt.Rows[i]["Apellido"]);
                p.FechaNac = System.Convert.ToDateTime(dt.Rows[i]["FechaNac"]);
                p.Email = System.Convert.ToString(dt.Rows[i]["Email"]);
                p.Domicilio = System.Convert.ToString(dt.Rows[i]["Domicilio"]);
                p.Telefono = System.Convert.ToString(dt.Rows[i]["Telefono"]);
                lista.Add(p);
            }
        }

        internal List<Entidades.Paciente> ListaFiltrada(string filtro, int pageindex, int pageSize)
        {
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = string.Format("SELECT * FROM(select Id, Nombre, Apellido, FechaNac, Email, Domicilio, Telefono from Pacientes where Apellido like '%{0}%' or Nombre like '%{0}%')  LIMIT {1}, {2};", filtro, pageindex * pageSize, pageSize);
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            ds.Reset();
            DB.Fill(ds);
            dt = ds.Tables[0];
            sql_con.Close();
            List<Entidades.Paciente> lista = new List<Entidades.Paciente>();
            Completar(lista);
            return lista;
        }

        public int Cantidad
        {
            get
            {
                sql_con.Open();
                sql_cmd = sql_con.CreateCommand();
                string CommandText = "select count(Id) from Pacientes;";
                DB = new SQLiteDataAdapter(CommandText, sql_con);
                ds.Reset();
                DB.Fill(ds);
                dt = ds.Tables[0];
                sql_con.Close();
                return System.Convert.ToInt32(dt.Rows[0][0]);
            }
        }

        internal int CantidadFiltrada(string filtro)
        {
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = string.Format("select count(Id) from Pacientes where Apellido like '%{0}%' or Nombre like '%{0}%';", filtro);
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            ds.Reset();
            DB.Fill(ds);
            dt = ds.Tables[0];
            sql_con.Close();
            return System.Convert.ToInt32(dt.Rows[0][0]);
        }

        internal int CantidadFiltradaXEmail(string filtro)
        {
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = string.Format("select count(Id) from Pacientes where Email ='{0}';", filtro);
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            ds.Reset();
            DB.Fill(ds);
            dt = ds.Tables[0];
            sql_con.Close();
            return System.Convert.ToInt32(dt.Rows[0][0]);
        }

        internal List<Entidades.Paciente> ListaFiltradaXEmail(string filtro)
        {
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            string CommandText = string.Format("select Id, Nombre, Apellido, FechaNac, Email, Domicilio, Telefono from Pacientes where Email = '{0}';", filtro);
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            ds.Reset();
            DB.Fill(ds);
            dt = ds.Tables[0];
            sql_con.Close();
            List<Entidades.Paciente> lista = new List<Entidades.Paciente>();
            Completar(lista);
            return lista;
        }
    }
}